home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
ada
/
ada_lrm3.zip
/
LR7AVCB.SRC
< prev
next >
Wrap
Text File
|
1989-03-28
|
41KB
|
1,251 lines
-- ON-LINE Ada LANGUAGE REFERENCE MANUAL
-- Developed at Nofolk State University
-- Development funded by a grant from the U. S. Army
-- Project ReDTEA
-- Version 1.0 released December 1988
-- Programmer: Esther M. Lumsdon
-- Project Director: George C. Harrison, PhD
package body LRM_NON_SMG is
procedure INITIALIZE is
-- Initialization for on-line Ada Language Reference Manual
--
--
----------------------------------------------------------------------------
procedure DECIDE_TERM_CATEGORY(USING_DEC_TERMINAL : out BOOLEAN) is
CHOSE_TERMINAL_CATEGORY : BOOLEAN;
TERM_CATEGORY : STRING(1 .. 5);
TERM_CATEGORY_LENGTH : NATURAL;
begin
loop
CLS;
PUT_LINE(" The following terminals are available for your use at NSU:")
;
PUT_LINE("Category A terminals:");
PUT_LINE(" VISUAL brand terminals");
PUT_LINE(" TeleVideo brand terminals");
PUT_LINE(" DEC terminals");
NEW_LINE;
PUT_LINE("Category B terminals:");
PUT_LINE(" ADM brand terminals");
PUT_LINE(" Adds-Viewpoint terminals");
PUT_LINE(" Hazeltine brand terminals");
NEW_LINE(2);
PUT(
"Please enter A or B for the category of terminal that you are using: "
);
GET_LINE(TERM_CATEGORY, TERM_CATEGORY_LENGTH);
CHOSE_TERMINAL_CATEGORY := TRUE;
case TERM_CATEGORY(1) is
when 'A' | ASCII.LC_A =>
USING_DEC_TERMINAL := TRUE;
when 'B' | ASCII.LC_B =>
USING_DEC_TERMINAL := FALSE;
when others =>
CHOSE_TERMINAL_CATEGORY := FALSE;
end case;
exit when CHOSE_TERMINAL_CATEGORY;
end loop;
end DECIDE_TERM_CATEGORY;
begin
USING_DEC_TERMINAL := FALSE;
end INITIALIZE;
------------------------------------------------------------------------------
procedure TERMINATE_LRM is
begin
if IS_OPEN(SAVE_FILE) then
CLOSE(SAVE_FILE);
end if;
CLS;
NEW_LINE(2);
PUT_LINE("Thank you for using the Ada Language Reference Manual Reader.");
end TERMINATE_LRM;
------------------------------------------------------------------------------
procedure DISPLAY_MAIN_MENU(IN_FILE_NAME : in STRING) is
-- read menu text from file, and put entire file on screen.
EMPTY_STRING_80 : STRING(1 .. 80);
LAST_CHAR : NATURAL := 0;
READ_IN_FILE : FILE_TYPE;
READ_IN_LINE : STRING(1 .. 80);
begin
EMPTY_STRING_80 := (others => ' ');
if not USING_DEC_TERMINAL then
OPEN(READ_IN_FILE, IN_FILE, IN_FILE_NAME);
while not END_OF_FILE(READ_IN_FILE) loop
READ_IN_LINE := EMPTY_STRING_80;
GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR);
PUT_LINE(READ_IN_LINE(1 .. SCREEN_WIDTH));
end loop;
end if;
end DISPLAY_MAIN_MENU;
------------------------------------------------------------------------------
procedure DISPLAY_MENU(IN_FILE_NAME : in STRING) is
-- read menu text from file, and put entire file on screen.
EMPTY_STRING_80 : STRING(1 .. 80);
LAST_CHAR : NATURAL := 0;
READ_IN_FILE : FILE_TYPE;
READ_IN_LINE : STRING(1 .. 80);
begin
EMPTY_STRING_80 := (others => ' ');
OPEN(READ_IN_FILE, IN_FILE, IN_FILE_NAME);
while not END_OF_FILE(READ_IN_FILE) loop
READ_IN_LINE := EMPTY_STRING_80;
GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR);
PUT_LINE(READ_IN_LINE(1 .. SCREEN_WIDTH));
end loop;
end DISPLAY_MENU;
---------------------------------------------------------------------------
procedure SCROLL_TEXT(IN_FILE_NAME : in STRING;
SAVE_TITLE : in STRING;
SAVE_FILE : in out FILE_TYPE) is
-- scroll text file on the screen, 19 lines at a time
type COMMAND is (CONTINUE, DISPLAY_AGAIN, EXIT_COMMAND, SAVE, NOTHING);
BLANK_COUNT : NATURAL := 0;
CURRENT_LINE : NATURAL := 0;
CURSOR_CONTROL_STR : STRING(1 .. 7) := " ";
EXIT_NOW : BOOLEAN := FALSE;
GOOD_ANSWER : BOOLEAN;
LAST_CHAR : NATURAL := 0;
LAST_COMMAND : COMMAND := NOTHING;
READ_IN_FILE : FILE_TYPE;
READ_IN_LINE : STRING(1 .. 80);
EMPTY_STRING_80 : STRING(1 .. 80);
SAVING : BOOLEAN := FALSE;
TARGET_LINE : NATURAL;
WAIT_STR : STRING(1 .. 10);
WAIT_STR_LENGTH : NATURAL;
LINE_COUNT : NATURAL := 0;
begin
EMPTY_STRING_80 := (others => ' ');
OPEN(READ_IN_FILE, IN_FILE, IN_FILE_NAME);
while not EXIT_NOW loop
LINE_COUNT := 0;
if LAST_COMMAND /= SAVE then
while ((not END_OF_FILE(READ_IN_FILE)) and (LINE_COUNT < (SCREEN_HEIGHT
- 3))) loop
if LINE_COUNT = 0 then
CLS;
end if;
READ_IN_LINE := EMPTY_STRING_80;
GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR);
if LAST_CHAR = 0 then
BLANK_COUNT := BLANK_COUNT + 1;
else
BLANK_COUNT := 0;
end if;
if BLANK_COUNT < 3 then
if LAST_CHAR > (SCREEN_WIDTH) then
PUT_LINE(READ_IN_LINE(1 .. SCREEN_WIDTH));
PUT_LINE(READ_IN_LINE(SCREEN_WIDTH + 1 .. LAST_CHAR));
LINE_COUNT := LINE_COUNT + 2;
else
PUT_LINE(READ_IN_LINE(1 .. SCREEN_WIDTH));
LINE_COUNT := LINE_COUNT + 1;
end if;
end if;
if SAVING then
PUT_LINE(SAVE_FILE, READ_IN_LINE(1 .. LAST_CHAR));
end if;
CURRENT_LINE := CURRENT_LINE + 1;
end loop;
end if;
GOOD_ANSWER := FALSE;
while not GOOD_ANSWER loop
GOOD_ANSWER := TRUE;
if LINE < 21 then
CURSOR_CONTROL_STR(2 .. 4) := INTEGER'IMAGE(SCREEN_HEIGHT);
CURSOR_CONTROL_STR(2) := '[';
CURSOR_CONTROL_STR(5 .. 7) := ";1H";
CURSOR_CONTROL_STR(1) := ASCII.ESC;
PUT_LINE(CURSOR_CONTROL_STR);
-- cursor_control_str contains ASCII.ESC & "[nn;1H"
end if;
-- put cursor on line screen_height of screen
WAIT_STR(1) := 'c';
if END_OF_FILE(READ_IN_FILE) then
PUT(" E[xit] S[ave] D[isplay again] ");
GET_LINE(WAIT_STR, WAIT_STR_LENGTH);
else
PUT(" E[xit] C[ontinue] S[ave] D[isplay again] ");
GET_LINE(WAIT_STR, WAIT_STR_LENGTH);
end if;
case WAIT_STR(1) is
when 'E' | ASCII.LC_E =>
LAST_COMMAND := EXIT_COMMAND;
EXIT_NOW := TRUE;
exit;
when 'S' | ASCII.LC_S =>
LAST_COMMAND := SAVE;
if not SAVING then
if not IS_OPEN(SAVE_FILE) then
CREATE(SAVE_FILE, OUT_FILE, LRM_READER_SAVE_FILE_NAME);
end if;
PUT_LINE(SAVE_FILE,
"Reference from Ada Language Reference Manual:");
PUT_LINE(SAVE_FILE, SAVE_TITLE);
-- write title of what is being saved to save_file.
NEW_LINE(SAVE_FILE, 2);
SAVING := TRUE;
if CURRENT_LINE > 1 then
RESET(READ_IN_FILE, IN_FILE);
for I in 1 .. CURRENT_LINE loop
GET_LINE(READ_IN_FILE, READ_IN_LINE, LAST_CHAR);
PUT_LINE(SAVE_FILE, READ_IN_LINE(1 .. LAST_CHAR));
end loop;
end if;
end if;
when 'D' | ASCII.LC_D =>
LAST_COMMAND := DISPLAY_AGAIN;
RESET(READ_IN_FILE, IN_FILE);
CURRENT_LINE := 0;
when '